package Day_0215.JVM;

/**
 * @author zxc
 * @date 2023/02/15 18:23
 **/
public class Class_Member_Local_Variable {
    public static void main(String[] args) {
        /**
         * 类变量，成员变量和局部变量在JVM中所存储的位置
         * ===》
         * 1.类变量
         * （1）类变量是用static修饰符修饰，定义在方法外的变量（即，静态变量），其随着类加载而产生/销毁;
         * （2）在java8之前，把静态变量存放于方法区，在java8时存放在堆中
         * ===》 即，类变量是与类相互绑定的;（类加载的时候，类变量就会被加载;）
         *
         * 2.成员变量
         * （1）成员变量是定义在类中，但是没有static修饰符修饰的变量，随着类实例而产生/销毁，是类实例的一部分;
         * （2）由于是类实例的一部分，在类初始化的时候，从运行时常量池取出直接引用或者值，与初始化的对象一起放入堆中;
         * ===> 即，成员变量是与类实例相互绑定的;（有其仅有在 类初始化时，即创建类实例的时候，成员变量会被加载;）
         *
         * 3.局部变量
         * （1）局部变量是定义在类的方法中的变量;
         * （2）在所在方法被调用时，放入虚拟机栈的栈帧中，方法执行结束后从虚拟机栈中弹出，所以存放在虚拟机栈中;
         * ===> 即，局部变量是与类方法相互绑定的;（有其仅有在方法被调用时，局部变量被加载到该方法所对应的栈帧中;）
         *
         */
    }
}
